using System;
using System.ComponentModel.DataAnnotations;
using Volo.Abp.Application.Dtos;
using Matrix.Notification.Domain.Shared.Notifications;

namespace Matrix.Notification.Notifications
{
    /// <summary>
    /// 获取用户通知请求DTO
    /// </summary>
    public class GetUserNotificationsDto : PagedAndSortedResultRequestDto
    {
        /// <summary>
        /// 用户ID
        /// </summary>
        [Required]
        public Guid UserId { get; set; }

        /// <summary>
        /// 通知状态过滤
        /// </summary>
        public NotificationStatus? Status { get; set; }

        /// <summary>
        /// 通知类型过滤
        /// </summary>
        public NotificationType? Type { get; set; }

        /// <summary>
        /// 通知渠道过滤
        /// </summary>
        public NotificationChannel? Channel { get; set; }

        /// <summary>
        /// 开始时间过滤
        /// </summary>
        public DateTime? StartTime { get; set; }

        /// <summary>
        /// 结束时间过滤
        /// </summary>
        public DateTime? EndTime { get; set; }

        /// <summary>
        /// 是否只显示未读通知
        /// </summary>
        public bool UnreadOnly { get; set; } = false;

        /// <summary>
        /// 是否只显示重要通知
        /// </summary>
        public bool ImportantOnly { get; set; } = false;

        /// <summary>
        /// 分类过滤
        /// </summary>
        [StringLength(100)]
        public string? Category { get; set; }

        /// <summary>
        /// 关联类型过滤
        /// </summary>
        [StringLength(100)]
        public string? RelatedEntityType { get; set; }

        /// <summary>
        /// 关联ID过滤
        /// </summary>
        public Guid? RelatedEntityId { get; set; }
    }
}